/*
 * @(#)BasicCheckBoxListUI.java 3/18/2009
 *
 * Copyright 2002 - 2009 JIDE Software Inc. All rights reserved.
 *
 */

package com.element.plaf.basic;

import javax.swing.*;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicListUI;
import java.awt.*;

public class BasicCheckBoxListUI extends BasicListUI {
	public BasicCheckBoxListUI() {
	}

	@SuppressWarnings({"UnusedDeclaration"})
	public static ComponentUI createUI(JComponent c) {
		return new BasicCheckBoxListUI();
	}

	@Override
	public int locationToIndex(JList aList, Point location) {
		int index = super.locationToIndex(aList, location);
		int size = list.getModel().getSize();
		if (index < size - 1) {
			return index;
		}

		// To avoid the behavior that clicking on the blank area selects the last item in the list.
		int y = location.y;
		Insets insets = list.getInsets();
		int maxRow = size - 1; // it is only valid for JList.VERTICAL scenario, no good solution for other orientations
		int row;
		if (cellHeights == null) {
			row = (cellHeight == 0) ? 0 :
					((y - insets.top) / cellHeight);
		} else if (size > cellHeights.length) {
			return index;
		} else {
			int rowYOffset = insets.top;
			for (row = 0; row < size; row++) {
				if (y >= rowYOffset && y < rowYOffset + cellHeights[row]) {
					break;
				}
				rowYOffset += cellHeights[row];
			}
		}
		if (row > maxRow) {
			return -1;
		} else {
			return index;
		}
	}
}